package annotationDemo.自定义检查注解;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.lang.reflect.Method;

/**
 * @author Ajie
 * @date 2023/8/3
 * @function
 */
// 简单的测试框架
// 当主方法柱形后，会自动执行被检测的所有方法（加Check注解的方法），判断方法是否有异常，记录到文件中
public class Check_Main{
    public static void main(String[] args) throws Exception{
        // 1.创建计算器对象
        Calculator c = new Calculator();
        // 2. 获取字节码文件对象
        Class cls = c.getClass();
        // 3. 获取所有方法
        Method[] methods = cls.getMethods();
        int number = 0;//出现异常的次数
        BufferedWriter bw = new BufferedWriter(new FileWriter("./src/annotationDemo/自定义检查注解/bug.txt"));

        for(Method method: methods){
            // 4. 判断方法上是否有Check注释
            if(method.isAnnotationPresent(Check.class)){
                // 5.如果有Check注释，则执行
                try{
                    method.invoke(c);
                }catch(Exception e){
                    // 6. 捕获异常，并记录到文件中
                    number ++;
                    bw.write(method.getName() + "方法出现异常");
                    bw.write("异常的名称："+e.getCause().getClass().getSimpleName());
                    bw.write("异常的原因："+e.getCause().getMessage());

                    System.err.println("Check_Main:main:"+method.getName() + "方法出现异常");
                    System.err.println("Check_Main:main:"+"异常的名称："+e.getCause().getClass().getSimpleName());
                    System.err.println("Check_Main:main:"+"异常的原因："+e.getCause().getMessage());
                }
            }
        }
        bw.write("本次测试一共出现"+number+"次异常");

        System.err.println("Check_Main:main:"+"本次测试一共出现"+number+"次异常");
        bw.flush();
        bw.close();
    }
}

